package br.trainee.web.util;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Locale;
import java.util.Map;
import java.util.ResourceBundle;

import org.json.simple.JSONObject;

public class UtilFuncoes {
	
	public static final String PARAM_ENTRADA = "action";
	
	public static final Integer TIPO_STATUS_ATIVO = 1;
	
	public static final Integer TIPO_STATUS_INATIVO = 2;
	
	public static final String PATH_RETORNO = "/jsf-pages/paginas/clinica/consultarClinica?faces-redirect=true&action=Consultar_Alterar";
	
	public static final String FLAG_COMBO = "0";
	
	public static final String PATH_LOG = "C:/Desenvolvimento/logs/log.txt";
	
	public static final String FLAG_SUCESSO = "sucesso";
	public static final String FLAG_FALHA = "falha";
	
	public static final String USUARIO_SESSAO = "usuario";
	
	public static final String USUARIO_COOKIE = "usuarioCookie";
	public static final String LEMBRAR_USUARIO_COOKIE = "lembrarUsuarioCookie";
	
	public static final String FLAG_LEMBRAR_USUARIO_SIM = "s";
	public static final String FLAG_LEMBRAR_USUARIO_NAO = "n";
	
	public static final String PATH_MESSAGES = "br.trainee.web.messages.messages";
	
	//Essa constante será usada para guardar na sessão o map que tem todos os labels já traduzidos para o usuário
	public static final String MAPA_LINGUAGEM = "mapaLinguagem";
	
	//Essa constante será usada para guardar na sessão o json que tem todos os labels já traduzidos para o usuário, porém no formato JSON
	public static final String MAPA_LINGUAGEM_JSON = "mapaLinguagem";

	//Essa constante guardará uma flag que identificará qual linguagem está o navegador do usuário
	public static final String LOCALE_NAVEGADOR = "localeNavegador";
	
	//Essa constante guardará o locale escolhido pelo usuário
	public static final String LOCALE_ESCOLHIDO = "localeEscolhido";
	
	//Essa constante guardará o map de linguagem de acordo com a escolha do usuário
	public static final String MAPA_LINGUAGEM_ESCOLHIDO = "mapaLinguagemEscolhido";
	
	//Essa constante guardará o map de linguagem de acordo com a escolha do usuário, porém será enviado no formato JSON
	public static final String MAPA_LINGUAGEM_ESCOLHIDO_JSON = "mapaLinguagemEscolhido";
	
	public static final String IMAGEM = "imagem";
	
	public static final String CLINICA_ALTERAR = "clinicaAlterar";
	
	
	public static String criptografarMd5(String campo){
		
		String campoFormatado = null;
		try {
			
			MessageDigest conversor = MessageDigest.getInstance("md5");
			conversor.update(campo.getBytes());
			
			BigInteger numericoAux = new BigInteger(1,conversor.digest());
			
			campoFormatado = numericoAux.toString(16);
			
		} catch (NoSuchAlgorithmException e) {
			
			campoFormatado = null;
		}
		
		
		return campoFormatado;
	}
	
	public static boolean isCampoComboValido(String campoCombo){
		
		return campoCombo == null || campoCombo.trim().equalsIgnoreCase(FLAG_COMBO);
	}
	
	public static boolean isCampoVazio(String campo){
		
		return campo == null || campo.trim().equals("");
	}
	
	public static Long converterDiasParaMili(int qtdDias){
		
		return (long)(1000*60*60*24*qtdDias);
	}
	
	public static Map<String,String> buscarLinguagem(Locale locale){
		
		Map<String,String> mapaLinguagem = new HashMap<String,String>();
		
		ResourceBundle bundle = ResourceBundle.getBundle(PATH_MESSAGES, locale);
		
		Iterator<String> iteradorMensagem = bundle.keySet().iterator();
		
		while(iteradorMensagem.hasNext()){
			
			String chave = iteradorMensagem.next();
			String valor = bundle.getString(chave);
			
			mapaLinguagem.put(chave, valor);
		}
		
		return mapaLinguagem;
	}
	
	public static JSONObject buscarLinguagemJson(Locale locale){
		
		JSONObject mapaLinguagem = new JSONObject();
		
		ResourceBundle bundle = ResourceBundle.getBundle(PATH_MESSAGES, locale);
		
		Iterator<String> iteradorMensagem = bundle.keySet().iterator();
		
		while(iteradorMensagem.hasNext()){
			
			String chave = iteradorMensagem.next();
			String valor = bundle.getString(chave);
			
			mapaLinguagem.put(chave, valor);
		}
		
		return mapaLinguagem;
	}
	
	public static boolean validarTamanhoMaximoEmail(String email){
		
		return email.length() <= 150;
	}
	
	public static boolean validarTamanhoMaximoTelefone(Long telefone){
		
		return String.valueOf(telefone).length() <= 9;
	}
	
	public static boolean validarTamanhoMaximoDDD(Integer ddd){
		
		return String.valueOf(ddd).length() <= 2;
	}
	
	public static Long converterByteParaMega(Long campo){
		
		return campo/1024/1024;
	}
	
	public static boolean verificarExtensaoImagem(String campo){
		
		String extensao = campo.substring(campo.lastIndexOf(".") +1, campo.length());
		
		if(!(extensao.toLowerCase().equals("jpg")) && !(extensao.toLowerCase().equals("png")) && !(extensao.toLowerCase().equals("jpeg"))){
			
			return false;
		}
		
		return true;
	}

}
